#include "Key.h"




Key_CB* KeyInit(gpio_pin_enum pin, GpioState TriggerState, KeyCallbackFun fun)
{

    Key_CB* res = malloc(sizeof(Key_CB));
    if (res == NULL) return NULL;
    gpio_init(pin, GPI, 0, GPI_PULL_UP);
    res->PIN = pin;
    res->TriggerState = TriggerState;
    res->fun = fun;
    res->LastState = gpio_get_level(pin);
    return res;
}

void KeyRuning(Key_CB* _Key_CB)
{
    uint8 state = gpio_get_level(_Key_CB->PIN);


    if (_Key_CB->fun)
    {
        switch (_Key_CB->TriggerState)
        {
        case Falling:
            if (_Key_CB->LastState == 1 && state == 0)
                _Key_CB->fun();
            break;
        case Rasing:
            if (_Key_CB->LastState == 0 && state == 1)
                _Key_CB->fun();
            break;
        case Change:
            if (_Key_CB->LastState != state)
                _Key_CB->fun();
            break;
        }
    }

    _Key_CB->LastState = state;
}